import pygame, sys
from settings import *
from level import Level

"""
游戏启动类
属性：Level(类) -> 将游戏类的很多功能在该类实现，使得游戏类代码更加简洁
函数：run -> 启动游戏
"""
class Game:
	def __init__(self):
		# 初始化pygame引擎
		pygame.init()
		# 设置窗口大小
		self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
		# 设置窗口游戏名
		pygame.display.set_caption('Sprout land')
		# 创建时钟对象：控制游戏的帧率并确保游戏在不同的设备上运行时具有一致的速度，.tick() 方法来限制游戏循环的速度
		self.clock = pygame.time.Clock()
		self.level = Level()

	def run(self):
		while True:
			"""
			用于获取当前事件队列中的所有事件
			事件可以是用户输入（例如按键、鼠标点击）或系统生成的事件（例如窗口关闭事件）
			调用 pygame.event.get() 函数将返回一个包含当前事件队列中所有事件的列表
			"""
			for event in pygame.event.get():
				# event.type 来判断不同类型的事件
				if event.type == pygame.QUIT:
					pygame.quit()
					sys.exit()
  			# dt游戏帧率
			dt = self.clock.tick() / 1000
			self.level.run(dt)
			"""
			用于更新游戏窗口的显示
			几种使用方式：
				1.不传递参数：调用 pygame.display.update() 时不传递参数，它会更新整个窗口的内容
				2.传递矩形列表：可以传递一组矩形作为参数，指定仅更新这些矩形区域的内容。
					例如，pygame.display.update(rect_list) 将只更新 rect_list 中指定的矩形区域
			"""
			pygame.display.update()

if __name__ == '__main__':
	game = Game()
	game.run()
